home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / thesource6.dms / thesource6.adf / Source / Misc / Retina.lha / retina.h
Encoding:
C/C++ Source or Header  |  1993-06-01  |  19.9 KB  |  582 lines

  1. Article 194 of alt.sources.amiga:
  2. Path: usenet.ee.pdx.edu!reed!batcomputer!caen!zaphod.mps.ohio-state.edu!math.ohio-state.edu!pacific.mps.ohio-state.edu!cis.ohio-state.edu!news.sei.cmu.edu!bb3.andrew.cmu.edu!andrew.cmu.edu!eb15+
  3. From: "Edward D. Berger" <eb15+@andrew.cmu.edu>
  4. Newsgroups: alt.sources.amiga
  5. Subject: GCC inline header for Retina Board Programming
  6. Date: Wed, 26 May 1993 21:18:18 -0400
  7. Organization: Pittsburgh Supercomputing Center, Carnegie Mellon, Pittsburgh, PA
  8. Lines: 568
  9. Message-ID: <Ig11POm00WB4EI6UZl@andrew.cmu.edu>
  10. NNTP-Posting-Host: po4.andrew.cmu.edu
  11.  
  12. The Retina is a very nice ZorroII graphics board for the Amiga, and it comes
  13. with programming support for SAS/C, which also works with the current
  14. registered version of DICE, but not Markus Wild's port of GCC.  Since I want
  15. to be able to program my Retina board with GCC, I decided to create this
  16. "<inline/retina.h>" file, and found I had to hack on the included prototype
  17. and fd file before I could compile a simple program.  I'm posting this here
  18. to help out other programmers with GCC.  This is mostly untested, except
  19. for the one demo program Mark Thomas posted to comp.sys.amiga.programmer.
  20. It works fine for that.
  21.  
  22. >> BEGIN INCLUDE FILE <<
  23. /* This is an inline header for programming the Retina Graphics card with */
  24. /*  GCC It is posted to 'alt.sources.amiga' as it is basically untested. */
  25. /*  You still need to include the "retina/retina.h" file in your source  */
  26. /*  before including this inline header. The Retina Board comes with     */
  27. /*  developer software in every package.  Thank you MacroSystem!         */
  28.  
  29. /*
  30.  * <inline/retina.h> $VER: 1.2 (26-5-93) ALPHA
  31.  * generated by EDB 5-26-93 from version 1.2 retina_lib.fd
  32.  * notes:  This was created by hacking retina_lib.fd and retina_protos.h
  33.  *         until they worked properly with the conv.p perl script
  34.  *         distributed in Markus Wild's GCC 2.3.3 port to Amiga OS
  35.  *         The fd file was used as the arbiter when conflicts arose.
  36.  *         General problems were upper case register names: use a0 not A0...
  37.  *         FD functions had less parameters than the PROTOS. Huh??????
  38.  *         This worked with the 'demo' program that was posted to
  39.  *         comp.sys.amiga.programmer, and that is as far as I've tested it.
  40.  *         Install in your gcc:os-include/inline directory, and use this
  41.  *         instead of the 'pragmas' and 'clib/protos' include files
  42.  */
  43.  
  44. #ifndef _RETINA_PROTOS_H
  45. #define _RETINA_PROTOS_H
  46.  
  47. #include <sys/cdefs.h>
  48. #include <inline/stubs.h>
  49.  
  50. __BEGIN_DECLS
  51. #ifndef BASE_EXT_DECL
  52. #define BASE_EXT_DECL extern struct Library * RetinaBase;
  53. #endif
  54. #ifndef BASE_PAR_DECL
  55. #define BASE_PAR_DECL
  56. #define BASE_PAR_DECL0 void
  57. #endif
  58. #ifndef BASE_NAME
  59. #define BASE_NAME RetinaBase
  60. #endif
  61.  
  62. static __inline UBYTE *
  63. Retina_AllocBitMap (BASE_PAR_DECL UWORD width,UWORD height,
  64.                     UWORD bytesPerPixel,ULONG flags)
  65. {
  66.   BASE_EXT_DECL
  67.   register UBYTE *  _res  __asm("d0");
  68.   register struct Library *a6 __asm("a6") = BASE_NAME;
  69.   register UWORD d0 __asm("d0") = width;
  70.   register UWORD d1 __asm("d1") = height;
  71.   register UWORD d2 __asm("d2") = bytesPerPixel;
  72.   register ULONG d3 __asm("d3") = flags;
  73.   __asm __volatile ("jsr a6@(-0xde)"
  74.   : "=r" (_res)
  75.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  76.   : "a0","a1","d0","d1","d2","d3", "memory");
  77.   return _res;
  78. }
  79. static __inline ULONG
  80. Retina_AvailMem (BASE_PAR_DECL ULONG flags)
  81. {
  82.   BASE_EXT_DECL
  83.   register ULONG  _res  __asm("d0");
  84.   register struct Library *a6 __asm("a6") = BASE_NAME;
  85.   register ULONG d0 __asm("d0") = flags;
  86.   __asm __volatile ("jsr a6@(-0xea)"
  87.   : "=r" (_res)
  88.   : "r" (a6), "r" (d0)
  89.   : "a0","a1","d0","d1", "memory");
  90.   return _res;
  91. }
  92. static __inline void
  93. Retina_Circle (BASE_PAR_DECL struct RetinaScreen *screen,
  94.                UWORD x,UWORD y,UWORD r)
  95. {
  96.   BASE_EXT_DECL
  97.   register struct Library *a6 __asm("a6") = BASE_NAME;
  98.   register struct RetinaScreen *a0 __asm("a0") = screen;
  99.   register UWORD d0 __asm("d0") = x;
  100.   register UWORD d1 __asm("d1") = y;
  101.   register UWORD d2 __asm("d2") = r;
  102.   __asm __volatile ("jsr a6@(-0x108)"
  103.   : /* no output */
  104.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  105.   : "a0","a1","d0","d1","d2", "memory");
  106. }
  107. static __inline void
  108. Retina_ClearScreen (BASE_PAR_DECL struct RetinaScreen *screen)
  109. {
  110.   BASE_EXT_DECL
  111.   register struct Library *a6 __asm("a6") = BASE_NAME;
  112.   register struct RetinaScreen *a0 __asm("a0") = screen;
  113.   __asm __volatile ("jsr a6@(-0xf0)"
  114.   : /* no output */
  115.   : "r" (a6), "r" (a0)
  116.   : "a0","a1","d0","d1", "memory");
  117. }
  118. static __inline void
  119. Retina_CloseScreen (BASE_PAR_DECL struct RetinaScreen *screen)
  120. {
  121.   BASE_EXT_DECL
  122.   register struct Library *a6 __asm("a6") = BASE_NAME;
  123.   register struct RetinaScreen *a0 __asm("a0") = screen;
  124.   __asm __volatile ("jsr a6@(-0xc0)"
  125.   : /* no output */
  126.   : "r" (a6), "r" (a0)
  127.   : "a0","a1","d0","d1", "memory");
  128. }
  129. static __inline void
  130. Retina_CopyRect (BASE_PAR_DECL struct RetinaScreen *srcScreen,UWORD srcX,
  131.                  UWORD srcY,struct RetinaScreen *destScreen,UWORD destX,
  132.                  UWORD destY,UWORD sizeX,UWORD sizeY)
  133. {
  134.   BASE_EXT_DECL
  135.   register struct Library *a6 __asm("a6") = BASE_NAME;
  136.   register struct RetinaScreen *a0 __asm("a0") = srcScreen;
  137.   register UWORD d0 __asm("d0") = srcX;
  138.   register UWORD d1 __asm("d1") = srcY;
  139.   register struct RetinaScreen *a1 __asm("a1") = destScreen;
  140.   register UWORD d2 __asm("d2") = destX;
  141.   register UWORD d3 __asm("d3") = destY;
  142.   register UWORD d4 __asm("d4") = sizeX;
  143.   register UWORD d5 __asm("d5") = sizeY;
  144.   __asm __volatile ("jsr a6@(-0x14a)"
  145.   : /* no output */
  146.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1), "r" (d2), "r" (d3), \
  147.     "r" (d4), "r" (d5)
  148.   : "a0","a1","d0","d1","d2","d3","d4","d5", "memory");
  149. }
  150. static __inline void
  151. Retina_DisownRetina (BASE_PAR_DECL0)
  152. {
  153.   BASE_EXT_DECL
  154.   register struct Library *a6 __asm("a6") = BASE_NAME;
  155.   __asm __volatile ("jsr a6@(-0x168)"
  156.   : /* no output */
  157.   : "r" (a6)
  158.   : "a0","a1","d0","d1", "memory");
  159. }
  160. static __inline struct RetinaMonitor *
  161. Retina_FindMonitor (BASE_PAR_DECL ULONG monitorID)
  162. {
  163.   BASE_EXT_DECL
  164.   register struct RetinaMonitor *  _res  __asm("d0");
  165.   register struct Library *a6 __asm("a6") = BASE_NAME;
  166.   register ULONG d0 __asm("d0") = monitorID;
  167.   __asm __volatile ("jsr a6@(-0xae)"
  168.   : "=r" (_res)
  169.   : "r" (a6), "r" (d0)
  170.   : "a0","a1","d0","d1", "memory");
  171.   return _res;
  172. }
  173. static __inline void
  174. Retina_FreeBitMap (BASE_PAR_DECL UBYTE *bitmap)
  175. {
  176.   BASE_EXT_DECL
  177.   register struct Library *a6 __asm("a6") = BASE_NAME;
  178.   register UBYTE *a0 __asm("a0") = bitmap;
  179.   __asm __volatile ("jsr a6@(-0xe4)"
  180.   : /* no output */
  181.   : "r" (a6), "r" (a0)
  182.   : "a0","a1","d0","d1", "memory");
  183. }
  184. static __inline ULONG
  185. Retina_GetAPen (BASE_PAR_DECL struct RetinaScreen *screen)
  186. {
  187.   BASE_EXT_DECL
  188.   register ULONG  _res  __asm("d0");
  189.   register struct Library *a6 __asm("a6") = BASE_NAME;
  190.   register struct RetinaScreen *a0 __asm("a0") = screen;
  191.   __asm __volatile ("jsr a6@(-0x132)"
  192.   : "=r" (_res)
  193.   : "r" (a6), "r" (a0)
  194.   : "a0","a1","d0","d1", "memory");
  195.   return _res;
  196. }
  197. static __inline ULONG
  198. Retina_GetDefaultScreenInfo (BASE_PAR_DECL ULONG defaultID,
  199.                              struct DefaultScreenInfo * buffer)
  200. {
  201.   BASE_EXT_DECL
  202.   register ULONG  _res  __asm("d0");
  203.   register struct Library *a6 __asm("a6") = BASE_NAME;
  204.   register ULONG d0 __asm("d0") = defaultID;
  205.   register struct DefaultScreenInfo * a0 __asm("a0") = buffer;
  206.   __asm __volatile ("jsr a6@(-0x5a)"
  207.   : "=r" (_res)
  208.   : "r" (a6), "r" (d0), "r" (a0)
  209.   : "a0","a1","d0","d1", "memory");
  210.   return _res;
  211. }
  212. static __inline void
  213. Retina_Line (BASE_PAR_DECL struct RetinaScreen *screen,
  214.              UWORD x1,UWORD y1,UWORD x2,UWORD y2)
  215. {
  216.   BASE_EXT_DECL
  217.   register struct Library *a6 __asm("a6") = BASE_NAME;
  218.   register struct RetinaScreen *a0 __asm("a0") = screen;
  219.   register UWORD d0 __asm("d0") = x1;
  220.   register UWORD d1 __asm("d1") = y1;
  221.   register UWORD d2 __asm("d2") = x2;
  222.   register UWORD d3 __asm("d3") = y2;
  223.   __asm __volatile ("jsr a6@(-0x10e)"
  224.   : /* no output */
  225.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  226.   : "a0","a1","d0","d1","d2","d3", "memory");
  227. }
  228. static __inline void
  229. Retina_LoadPalette (BASE_PAR_DECL struct RetinaScreen *screen,
  230.                     UWORD first,UWORD count,UBYTE *table)
  231. {
  232.   BASE_EXT_DECL
  233.   register struct Library *a6 __asm("a6") = BASE_NAME;
  234.   register struct RetinaScreen *a0 __asm("a0") = screen;
  235.   register UWORD d0 __asm("d0") = first;
  236.   register UWORD d1 __asm("d1") = count;
  237.   register UBYTE *a1 __asm("a1") = table;
  238.   __asm __volatile ("jsr a6@(-0x8a)"
  239.   : /* no output */
  240.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1)
  241.   : "a0","a1","d0","d1", "memory");
  242. }
  243. static __inline void
  244. Retina_MoveSprite (BASE_PAR_DECL struct RetinaScreen *screen,
  245.                    UWORD x,UWORD y)
  246. {
  247.   BASE_EXT_DECL
  248.   register struct Library *a6 __asm("a6") = BASE_NAME;
  249.   register struct RetinaScreen *a0 __asm("a0") = screen;
  250.   register UWORD d0 __asm("d0") = x;
  251.   register UWORD d1 __asm("d1") = y;
  252.   __asm __volatile ("jsr a6@(-0x126)"
  253.   : /* no output */
  254.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  255.   : "a0","a1","d0","d1", "memory");
  256. }
  257. static __inline struct RetinaMonitor *
  258. Retina_NextMonitor (BASE_PAR_DECL struct RetinaMonitor *monitor)
  259. {
  260.   BASE_EXT_DECL
  261.   register struct RetinaMonitor *  _res  __asm("d0");
  262.   register struct Library *a6 __asm("a6") = BASE_NAME;
  263.   register struct RetinaMonitor *a0 __asm("a0") = monitor;
  264.   __asm __volatile ("jsr a6@(-0xb4)"
  265.   : "=r" (_res)
  266.   : "r" (a6), "r" (a0)
  267.   : "a0","a1","d0","d1", "memory");
  268.   return _res;
  269. }
  270. static __inline struct RetinaScreen *
  271. Retina_OpenScreen (BASE_PAR_DECL UWORD width,UWORD height,
  272.                    ULONG monitorID,ULONG flags,APTR tags)
  273. {
  274.   BASE_EXT_DECL
  275.   register struct RetinaScreen *  _res  __asm("d0");
  276.   register struct Library *a6 __asm("a6") = BASE_NAME;
  277.   register UWORD d0 __asm("d0") = width;
  278.   register UWORD d1 __asm("d1") = height;
  279.   register ULONG d2 __asm("d2") = monitorID;
  280.   register ULONG d3 __asm("d3") = flags;
  281.   register APTR a0 __asm("a0") = tags;
  282.   __asm __volatile ("jsr a6@(-0xba)"
  283.   : "=r" (_res)
  284.   : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a0)
  285.   : "a0","a1","d0","d1","d2","d3", "memory");
  286.   return _res;
  287. }
  288. static __inline void
  289. Retina_OwnRetina (BASE_PAR_DECL0)
  290. {
  291.   BASE_EXT_DECL
  292.   register struct Library *a6 __asm("a6") = BASE_NAME;
  293.   __asm __volatile ("jsr a6@(-0x162)"
  294.   : /* no output */
  295.   : "r" (a6)
  296.   : "a0","a1","d0","d1", "memory");
  297. }
  298. static __inline ULONG
  299. Retina_ReadPixel (BASE_PAR_DECL struct RetinaScreen *screen,
  300.                   UWORD x,UWORD y)
  301. {
  302.   BASE_EXT_DECL
  303.   register ULONG  _res  __asm("d0");
  304.   register struct Library *a6 __asm("a6") = BASE_NAME;
  305.   register struct RetinaScreen *a0 __asm("a0") = screen;
  306.   register UWORD d0 __asm("d0") = x;
  307.   register UWORD d1 __asm("d1") = y;
  308.   __asm __volatile ("jsr a6@(-0x138)"
  309.   : "=r" (_res)
  310.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  311.   : "a0","a1","d0","d1", "memory");
  312.   return _res;
  313. }
  314. static __inline void
  315. Retina_ReadRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  316.                  UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
  317.         UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  318. {
  319.   BASE_EXT_DECL
  320.   register struct Library *a6 __asm("a6") = BASE_NAME;
  321.   register UBYTE *a0 __asm("a0") = mem;
  322.   register UWORD d0 __asm("d0") = memX;
  323.   register UWORD d1 __asm("d1") = memY;
  324.   register UWORD d2 __asm("d2") = memWidth;
  325.   register ULONG d3 __asm("d3") = mode;
  326.   register struct RetinaScreen *a1 __asm("a1") = screen;
  327.   register UWORD d4 __asm("d4") = screenX;
  328.   register UWORD d5 __asm("d5") = screenY;
  329.   register UWORD d6 __asm("d6") = sizeX;
  330.   register UWORD d7 __asm("d7") = sizeY;
  331.   register UBYTE *a2 __asm("a2") = mem2;
  332.   __asm __volatile ("jsr a6@(-0x144)"
  333.   : /* no output */
  334.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1), \
  335.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  336.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  337. }
  338. static __inline void
  339. Retina_RectFill (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x1,UWORD y1,
  340.                  UWORD x2,UWORD y2)
  341. {
  342.   BASE_EXT_DECL
  343.   register struct Library *a6 __asm("a6") = BASE_NAME;
  344.   register struct RetinaScreen *a0 __asm("a0") = screen;
  345.   register UWORD d0 __asm("d0") = x1;
  346.   register UWORD d1 __asm("d1") = y1;
  347.   register UWORD d2 __asm("d2") = x2;
  348.   register UWORD d3 __asm("d3") = y2;
  349.   __asm __volatile ("jsr a6@(-0xf6)"
  350.   : /* no output */
  351.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  352.   : "a0","a1","d0","d1","d2","d3", "memory");
  353. }
  354. static __inline void
  355. Retina_ScreenToBack (BASE_PAR_DECL struct RetinaScreen *screen)
  356. {
  357.   BASE_EXT_DECL
  358.   register struct Library *a6 __asm("a6") = BASE_NAME;
  359.   register struct RetinaScreen *a0 __asm("a0") = screen;
  360.   __asm __volatile ("jsr a6@(-0x114)"
  361.   : /* no output */
  362.   : "r" (a6), "r" (a0)
  363.   : "a0","a1","d0","d1", "memory");
  364. }
  365. static __inline void
  366. Retina_ScreenToFront (BASE_PAR_DECL struct RetinaScreen *screen)
  367. {
  368.   BASE_EXT_DECL
  369.   register struct Library *a6 __asm("a6") = BASE_NAME;
  370.   register struct RetinaScreen *a0 __asm("a0") = screen;
  371.   __asm __volatile ("jsr a6@(-0xc6)"
  372.   : /* no output */
  373.   : "r" (a6), "r" (a0)
  374.   : "a0","a1","d0","d1", "memory");
  375. }
  376. static __inline void
  377. Retina_SetAPen (BASE_PAR_DECL struct RetinaScreen *screen,ULONG color)
  378. {
  379.   BASE_EXT_DECL
  380.   register struct Library *a6 __asm("a6") = BASE_NAME;
  381.   register struct RetinaScreen *a0 __asm("a0") = screen;
  382.   register ULONG d0 __asm("d0") = color;
  383.   __asm __volatile ("jsr a6@(-0xfc)"
  384.   : /* no output */
  385.   : "r" (a6), "r" (a0), "r" (d0)
  386.   : "a0","a1","d0","d1", "memory");
  387. }
  388. static __inline void
  389. Retina_SetDrMd (BASE_PAR_DECL struct RetinaScreen *screen,ULONG mode)
  390. {
  391.   BASE_EXT_DECL
  392.   register struct Library *a6 __asm("a6") = BASE_NAME;
  393.   register struct RetinaScreen *a0 __asm("a0") = screen;
  394.   register ULONG d0 __asm("d0") = mode;
  395.   __asm __volatile ("jsr a6@(-0x15c)"
  396.   : /* no output */
  397.   : "r" (a6), "r" (a0), "r" (d0)
  398.   : "a0","a1","d0","d1", "memory");
  399. }
  400. static __inline void
  401. Retina_SetPalette (BASE_PAR_DECL struct RetinaScreen *screen,UWORD index,
  402.                   UBYTE red,UBYTE green,UBYTE blue)
  403. {
  404.   BASE_EXT_DECL
  405.   register struct Library *a6 __asm("a6") = BASE_NAME;
  406.   register struct RetinaScreen *a0 __asm("a0") = screen;
  407.   register UWORD d0 __asm("d0") = index;
  408.   register UBYTE d1 __asm("d1") = red;
  409.   register UBYTE d2 __asm("d2") = green;
  410.   register UBYTE d3 __asm("d3") = blue;
  411.   __asm __volatile ("jsr a6@(-0x90)"
  412.   : /* no output */
  413.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  414.   : "a0","a1","d0","d1","d2","d3", "memory");
  415. }
  416. static __inline void
  417. Retina_SetPixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,
  418.                  UWORD y,ULONG color)
  419. {
  420.   BASE_EXT_DECL
  421.   register struct Library *a6 __asm("a6") = BASE_NAME;
  422.   register struct RetinaScreen *a0 __asm("a0") = screen;
  423.   register UWORD d0 __asm("d0") = x;
  424.   register UWORD d1 __asm("d1") = y;
  425.   register ULONG d2 __asm("d2") = color;
  426.   __asm __volatile ("jsr a6@(-0x156)"
  427.   : /* no output */
  428.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  429.   : "a0","a1","d0","d1","d2", "memory");
  430. }
  431. static __inline UBYTE *
  432. Retina_SetSegmentPtr (BASE_PAR_DECL UBYTE *address)
  433. {
  434.   BASE_EXT_DECL
  435.   register UBYTE *  _res  __asm("d0");
  436.   register struct Library *a6 __asm("a6") = BASE_NAME;
  437.   register UBYTE *a0 __asm("a0") = address;
  438.   __asm __volatile ("jsr a6@(-0x96)"
  439.   : "=r" (_res)
  440.   : "r" (a6), "r" (a0)
  441.   : "a0","a1","d0","d1", "memory");
  442.   return _res;
  443. }
  444. static __inline ULONG
  445. Retina_SetSprite (BASE_PAR_DECL struct RetinaScreen *screen,ULONG *data,
  446.                   UWORD height,APTR tags)
  447. {
  448.   BASE_EXT_DECL
  449.   register ULONG  _res  __asm("d0");
  450.   register struct Library *a6 __asm("a6") = BASE_NAME;
  451.   register struct RetinaScreen *a0 __asm("a0") = screen;
  452.   register ULONG *a1 __asm("a1") = data;
  453.   register UWORD d0 __asm("d0") = height;
  454.   register APTR a2 __asm("a2") = tags;
  455.   __asm __volatile ("jsr a6@(-0x120)"
  456.   : "=r" (_res)
  457.   : "r" (a6), "r" (a0), "r" (a1), "r" (d0), "r" (a2)
  458.   : "a0","a1","a2","d0","d1", "memory");
  459.   return _res;
  460. }
  461. static __inline void
  462. Retina_SpriteFunction (BASE_PAR_DECL struct RetinaScreen *screen,APTR tags)
  463. {
  464.   BASE_EXT_DECL
  465.   register struct Library *a6 __asm("a6") = BASE_NAME;
  466.   register struct RetinaScreen *a0 __asm("a0") = screen;
  467.   register APTR a1 __asm("a1") = tags;
  468.   __asm __volatile ("jsr a6@(-0x12c)"
  469.   : /* no output */
  470.   : "r" (a6), "r" (a0), "r" (a1)
  471.   : "a0","a1","d0","d1", "memory");
  472. }
  473. static __inline void
  474. Retina_SwapBitMap (BASE_PAR_DECL struct RetinaScreen *screen)
  475. {
  476.   BASE_EXT_DECL
  477.   register struct Library *a6 __asm("a6") = BASE_NAME;
  478.   register struct RetinaScreen *a0 __asm("a0") = screen;
  479.   __asm __volatile ("jsr a6@(-0x11a)"
  480.   : /* no output */
  481.   : "r" (a6), "r" (a0)
  482.   : "a0","a1","d0","d1", "memory");
  483. }
  484. static __inline void
  485. Retina_SwapRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  486.                  UWORD memWidth,ULONG mode,struct RetinaScreen *screen,UWORD
  487.                  screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  488. {
  489.   BASE_EXT_DECL
  490.   register struct Library *a6 __asm("a6") = BASE_NAME;
  491.   register UBYTE *a0 __asm("a0") = mem;
  492.   register UWORD d0 __asm("d0") = memX;
  493.   register UWORD d1 __asm("d1") = memY;
  494.   register UWORD d2 __asm("d2") = memWidth;
  495.   register ULONG d3 __asm("d3") = mode;
  496.   register struct RetinaScreen *a1 __asm("a1") = screen;
  497.   register UWORD d4 __asm("d4") = screenX;
  498.   register UWORD d5 __asm("d5") = screenY;
  499.   register UWORD d6 __asm("d6") = sizeX;
  500.   register UWORD d7 __asm("d7") = sizeY;
  501.   register UBYTE *a2 __asm("a2") = mem2;
  502.   __asm __volatile ("jsr a6@(-0x150)"
  503.   : /* no output */
  504.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
  505.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  506.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  507. }
  508. static __inline BOOL
  509. Retina_WriteBitMap (BASE_PAR_DECL struct RetinaScreen *screen,
  510.                     struct BitMap *bitmap,UBYTE *palette,UWORD destX,
  511.                     UWORD destY,UWORD width,ULONG mode)
  512. {
  513.   BASE_EXT_DECL
  514.   register BOOL  _res  __asm("d0");
  515.   register struct Library *a6 __asm("a6") = BASE_NAME;
  516.   register struct RetinaScreen *a0 __asm("a0") = screen;
  517.   register struct BitMap *a1 __asm("a1") = bitmap;
  518.   register UBYTE *a2 __asm("a2") = palette;
  519.   register UWORD d0 __asm("d0") = destX;
  520.   register UWORD d1 __asm("d1") = destY;
  521.   register UWORD d2 __asm("d2") = width;
  522.   register ULONG d3 __asm("d3") = mode;
  523.   __asm __volatile ("jsr a6@(-0x36)"
  524.   : "=r" (_res)
  525.   : "r" (a6), "r" (a0), "r" (a1), "r" (a2), "r" (d0), "r" (d1),\
  526.     "r" (d2), "r" (d3)
  527.   : "a0","a1","a2","d0","d1","d2","d3", "memory");
  528.   return _res;
  529. }
  530. static __inline void
  531. Retina_WritePixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,UWORD y)
  532. {
  533.   BASE_EXT_DECL
  534.   register struct Library *a6 __asm("a6") = BASE_NAME;
  535.   register struct RetinaScreen *a0 __asm("a0") = screen;
  536.   register UWORD d0 __asm("d0") = x;
  537.   register UWORD d1 __asm("d1") = y;
  538.   __asm __volatile ("jsr a6@(-0x102)"
  539.   : /* no output */
  540.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  541.   : "a0","a1","d0","d1", "memory");
  542. }
  543. static __inline void
  544. Retina_WriteRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
  545.                   UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
  546.         UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
  547. {
  548.   BASE_EXT_DECL
  549.   register struct Library *a6 __asm("a6") = BASE_NAME;
  550.   register UBYTE *a0 __asm("a0") = mem;
  551.   register UWORD d0 __asm("d0") = memX;
  552.   register UWORD d1 __asm("d1") = memY;
  553.   register UWORD d2 __asm("d2") = memWidth;
  554.   register ULONG d3 __asm("d3") = mode;
  555.   register struct RetinaScreen *a1 __asm("a1") = screen;
  556.   register UWORD d4 __asm("d4") = screenX;
  557.   register UWORD d5 __asm("d5") = screenY;
  558.   register UWORD d6 __asm("d6") = sizeX;
  559.   register UWORD d7 __asm("d7") = sizeY;
  560.   register UBYTE *a2 __asm("a2") = mem2;
  561.   __asm __volatile ("jsr a6@(-0x13e)"
  562.   : /* no output */
  563.   : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
  564.     "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  565.   : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
  566. }
  567. #undef BASE_EXT_DECL
  568. #undef BASE_PAR_DECL
  569. #undef BASE_PAR_DECL0
  570. #undef BASE_NAME
  571.  
  572. __END_DECLS
  573.  
  574. #endif /* _RETINA_PROTOS_H */
  575.  
  576. >>>> END INCLUDED FILE <<<<
  577.  
  578. -Ed Berger
  579. eb15@andrew.cmu.edu
  580.  
  581.  
  582.